{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introduction\n",
    "----\n",
    "In this assignment, you will convert your batch least squares solution to a recursive one! Recall that you have the following data:\n",
    "\n",
    "| Current (A) | Voltage (V) |\n",
    "|-------------|-------------|\n",
    "| 0.2         | 1.23        |\n",
    "| 0.3         | 1.38        |\n",
    "| 0.4         | 2.06        |\n",
    "| 0.5         | 2.47        |\n",
    "| 0.6         | 3.17        |\n",
    "\n",
    "This time, you will be fitting a linear model which includes an offset, $y = Rx + b$. If Ohm's law ($V = RI$) holds, we expect this offset to be near zero.\n",
    "\n",
    "You will set the initial parameters with the assumption that your prior estimate of the resistance $R = 4$ is not very good. Also, since you are fairly certain that Ohm's law ($V = RI$) does, in fact, hold, it is safe to assume with high confidence that the offset term $b$ will be close to zero. Initialize the estimator as follows:\n",
    "\n",
    "$$\\hat{R} \\sim \\mathcal{N}(4, 10.0), \\hat{b} \\sim \\mathcal{N}(0, 0.2)$$\n",
    "\n",
    "You can assume that we know the current perfectly, and that the voltage measurements are corrupted by additive, independent and identitically distributed Gaussian noise with variance $0.0225 ~ V^2$.\n",
    "\n",
    "## Getting Started\n",
    "----\n",
    "As before, load the current and voltge measurements into numpy arrays and plot the values:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from numpy.linalg import inv\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "I = np.array([0.2, 0.3, 0.4, 0.5, 0.6])\n",
    "V = np.array([1.23, 1.38, 2.06, 2.47, 3.17])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(I, V)\n",
    "\n",
    "plt.xlabel('current (A)')\n",
    "plt.ylabel('voltage (V)')\n",
    "plt.grid(True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Estimating the Parameters\n",
    "----\n",
    "### Batch Estimator\n",
    "Before implementing recursive least squares, let's review the parameter estimate given by the batch least squares method used in the previous assignment. This time, you will be fitting a model which contains an offset $y = Rx + b$. We can use this result later for comparison."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The parameters of the line fit are ([R, b]):\n",
      "[ 4.97   0.074]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "## Batch Solution\n",
    "H = np.ones((5,2))\n",
    "H[:, 0] = I\n",
    "x_ls = inv(H.T.dot(H)).dot(H.T.dot(V))\n",
    "print('The parameters of the line fit are ([R, b]):')\n",
    "print(x_ls)\n",
    "\n",
    "#Plot\n",
    "I_line = np.arange(0, 0.8, 0.1)\n",
    "V_line = x_ls[0]*I_line + x_ls[1]\n",
    "\n",
    "plt.scatter(I, V)\n",
    "plt.plot(I_line, V_line)\n",
    "plt.xlabel('current (A)')\n",
    "plt.ylabel('voltage (V)')\n",
    "plt.grid(True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As expected, the offset parameter $\\hat{b}$ is near zero, while $\\hat{R}$ closely approximates the true resistance value of $R = 5~\\Omega$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Recursive Estimator\n",
    "Now try to implement the least squares method recursively! Recall the steps described in Module 1, Lesson 2 - \"Recursive Least Squares\": \n",
    "\n",
    "**Initialize the parameter and covariance estimates**:\n",
    "\n",
    "----\n",
    "$$\n",
    "\\hat{\\mathbf{x}}_0 = E\\left[\\mathbf{x}\\right] \\,\\,\\, , \\,\\,\\, \\mathbf{P}_0 = E\\left[(\\mathbf{x} - \\hat{\\mathbf{x}}_0)(\\mathbf{x} - \\hat{\\mathbf{x}}_0)^T\\right]\n",
    "$$\n",
    "\n",
    "**For every measurement k**:\n",
    "\n",
    "----\n",
    "  * Calculate the correction gain $$\\mathbf{K}_k = \\mathbf{P}_{k-1}\\mathbf{H}_k^T\\left(\\mathbf{H}_k\\mathbf{P}_{k-1}\\mathbf{H}_k^T + \\mathbf{R}_k\\right)^{-1}$$\n",
    "  * Update the parameter estimate $$\\hat{\\mathbf{x}}_k = \\hat{\\mathbf{x}}_{k-1} + \\mathbf{K}_k\\left(\\mathbf{y}_k - \\mathbf{H}_k\\hat{\\mathbf{x}}_{k-1}\\right)$$\n",
    "  * Update the covariance estimate $$\\mathbf{P}_k = \\left(\\mathbf{I} - \\mathbf{K}_k\\mathbf{H}_k\\right)\\mathbf{P}_{k-1}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The parameters of the line fit are ([R, b]):\n",
      "[ 4.98823881  0.06523665]\n"
     ]
    }
   ],
   "source": [
    "## Recursive solution\n",
    "\n",
    "#Initialize the 2x2 covaraince matrix\n",
    "# P_k = ...\n",
    "P_k = np.array([[20., 0.],\n",
    "                [ 0., 0.2]])\n",
    "\n",
    "#Initialize the parameter estimate x\n",
    "# x_k = ...\n",
    "x_k = np.array([4., 0.])\n",
    "\n",
    "#Our measurement variance\n",
    "Var = 0.0225\n",
    "\n",
    "#Pre allocate our solutions so we can save the estimate at every step\n",
    "num_meas = I.shape[0]\n",
    "x_hist = np.zeros((num_meas + 1,2))\n",
    "P_hist = np.zeros((num_meas + 1,2,2))\n",
    "\n",
    "x_hist[0] = x_k\n",
    "P_hist[0] = P_k\n",
    "\n",
    "identity = np.eye(2)\n",
    "\n",
    "#Iterate over the measurements\n",
    "for k in range(num_meas):\n",
    "    #Construct H_k\n",
    "    # H_k = ...\n",
    "    H_k = np.array([[I[k], 1.]])\n",
    "  \n",
    "    #Construct K_k\n",
    "    # K_k = ...\n",
    "    K_k = P_k @ H_k.T @ inv(H_k @ P_k @ H_k.T + Var)\n",
    "                    \n",
    "    #Update our estimate\n",
    "    # x_k = ...\n",
    "    x_k = x_k + K_k @ (V[k] - H_k @ x_k)\n",
    " \n",
    "    #Update our uncertainty\n",
    "    # P_k = ...\n",
    "    P_k = (identity - K_k @ H_k) @ P_k\n",
    "\n",
    "    #Keep track of our history\n",
    "    P_hist[k+1] = P_k\n",
    "    x_hist[k+1] = x_k\n",
    "    \n",
    "print('The parameters of the line fit are ([R, b]):')\n",
    "print(x_k)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Plotting the Results\n",
    "----\n",
    "Let's plot out the solutions at every step. Does the value converge towards the batch least squares solution from the previous assignment?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Plot\n",
    "plt.scatter(I, V, label='Data')\n",
    "plt.plot(I_line, V_line, label='Batch Solution')\n",
    "plt.xlabel('current (A)')\n",
    "plt.ylabel('voltage (V)')\n",
    "plt.grid(True)\n",
    "\n",
    "I_line = np.arange(0, 0.8, 0.1)\n",
    "for k in range(num_meas):\n",
    "    V_line = x_hist[k,0]*I_line + x_hist[k,1]\n",
    "    plt.plot(I_line, V_line, label='Measurement {}'.format(k))\n",
    "\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The resistance estimate does approach the true resistance value of $R = 5~\\Omega$. Try modifying the initialization values (e.g., the intial uncertainty) - can you get a better final estimate?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
